package com.mm.seguridad.service;


import com.mm.support.domain.TipoUsuario;
import com.mm.seguridad.dto.OpcionDTO;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.DefaultRedirectStrategy;
import org.springframework.security.web.RedirectStrategy;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * User: aglwkrs
 * Date: 11/01/12
 */
public class MMRedirectStrategy extends DefaultRedirectStrategy implements RedirectStrategy {
    private static final Logger LOG = LoggerFactory.getLogger(MMRedirectStrategy.class);

    MMSecurityInfo mmSecurityInfo;

    @Override
    public void sendRedirect(HttpServletRequest request, HttpServletResponse response, String url) throws IOException {
        String urlToRedirect = null;
        String carpetaPages = "/pages/";
        try {
            MMAuthenticationToken token = (MMAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
            if (StringUtils.isNotBlank((String) token.getToken())) {
                Integer tipoCuenta = mmSecurityInfo.obtenerTipoToken((String) token.getToken());
                String page = "";
                switch (tipoCuenta) {
                    case 0:
                        page = "verReportePagar.jsf";
                        break;
                    case 1:
                        page = "verReporteCobrar.jsf";
                        break;
                    case 2:
                        page = "verReporteAlmacen.jsf";
                        break;
                }

                urlToRedirect = carpetaPages + page;
            } else {
                List<OpcionDTO> opciones = OpcionManager.todasLasOpciones(TipoUsuario.USUARIO.getCode());
                for (OpcionDTO opcion : opciones) {
                    if (opcion.isShowMenu()) {
                        urlToRedirect = opcion.getUrl();
                        break;
                    }
                }
                if (urlToRedirect != null) {
                    urlToRedirect = carpetaPages + urlToRedirect;
                }
            }


        } catch (EckerdSecurityException e) {
            LOG.warn("Revise los siguientes detalles en configuracin seguridad", e);
            urlToRedirect = carpetaPages + "main.jsf";
        }
        if (urlToRedirect == null) {
            throw new EckerdSecurityException("Configure adecuadamente el URL de la opcion por defecto: ");
        }
        LOG.info("Abriendo directamente la pgina: " + urlToRedirect);
        super.sendRedirect(request, response, urlToRedirect);
    }

    public void setMmSecurityInfo(MMSecurityInfo mmSecurityInfo) {
        this.mmSecurityInfo = mmSecurityInfo;
    }
}
